为什么我的 selenium 代码在尝试检查 URL 中是否有某个单词时失败?

问题描述 投票:0回答:1

我正在使用终端运行自动化测试,我想检查该单词是否位于 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)
python selenium-webdriver
1个回答
0
投票

有一些问题...

  1. 您的

    search_bar
    定位器不正确。该定位器找不到元素,因此它只是超时。定位器应该是

    (By.CSS_SELECTOR, 'textarea[name="q"]')
    
  2. 您的第一个断言将失败,因为您输入“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)
    
  3. 通常你不想使用

    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)
© www.soinside.com 2019 - 2024. All rights reserved.