我正在使用终端运行自动化测试,我想检查该单词是否位于 URL 内。我想也许我有语法错误,因为我刚开始使用 selenium。
在 VSCode 中,这是我到目前为止所拥有的,我能够成功打开 chrome 浏览器并输入站点名称,但我无法让它扫描 URL 字符串。能帮忙解释一下是什么问题吗?
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
import unittest
import time
# Define the MyTestCase class
class MyTestCase(unittest.TestCase):
def setUp(self):
self.browser = webdriver.Chrome()
self.addCleanup(self.browser.quit)
def test_search_bar(self):
self.browser.get('http://www.google.com')
# Wait for the search bar element to be interactable
wait = WebDriverWait(self.browser, 10)
search_bar = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'input[type="text"]'))) # Use "text" instead of "textarea"
search_bar.send_keys('Amazon.com' + Keys.ENTER)
self.assertIn('Amazon.com', search_bar.get_attribute('value'))
# Wait for the URL to update
time.sleep(2)
self.assertIn('Amazon', self.browser.current_url) # Check for "Amazon" in the URL
if __name__ == '__main__':
unittest.main(verbosity=2)
有一些问题...
您的
search_bar
定位器不正确。该定位器找不到元素,因此它只是超时。定位器应该是
(By.CSS_SELECTOR, 'textarea[name="q"]')
您的第一个断言将失败,因为您输入“Amazon.com”并按 ENTER,然后然后您断言文本位于搜索栏中,但页面已经更改/更改,因为您按了 ENTER。如果要断言搜索栏中的文本,则需要将
.send_keys()
分成两步,断言位于中间...
search_bar.send_keys('Amazon.com')
self.assertIn('Amazon.com', search_bar.get_attribute('value'))
search_bar.send_keys(Keys.ENTER)
通常你不想使用
time.sleep()
。而是使用另一个 EC
等待 URL 更改
EC.url_changes(URL)
完成所有这些更改后,下面的代码已经过测试并且正在运行。
import unittest
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
# Define the MyTestCase class
class MyTestCase(unittest.TestCase):
def setUp(self):
self.browser = webdriver.Chrome()
self.addCleanup(self.browser.quit)
def test_search_bar(self):
URL = 'http://www.google.com'
self.browser.get(URL)
# Wait for the search bar element to be interactable
wait = WebDriverWait(self.browser, 10)
search_bar = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'textarea[name="q"]')))
search_bar.send_keys('Amazon.com')
self.assertIn('Amazon.com', search_bar.get_attribute('value'))
search_bar.send_keys(Keys.ENTER)
# Wait for the URL to update
wait.until(EC.url_changes(URL))
self.assertIn('Amazon', self.browser.current_url) # Check for "Amazon" in the URL
self.browser.quit()
if __name__ == '__main__':
unittest.main(verbosity=2)