【问题标题】:How do I test every link on a webpage with Selenium using Pytho and pytest or Selenium Firefox IDE?如何使用 Python 和 pytest 或 Selenium Firefox IDE 使用 Selenium 测试网页上的每个链接?
【发布时间】:2021-05-11 05:27:14
【问题描述】:

所以我正在尝试学习 Selenium 进行自动化测试。我有 Selenium IDE 以及用于 Firefox 和 Chrome 的 WebDrivers,它们都在我的 PATH 中,在 Windows 上。我已经能够进行基本测试,但这部分测试让我望而却步。我已经切换到使用 Python,因为 IDE 没有足够的功能,您甚至无法单击返回按钮。

我很确定这已在其他地方得到解答,但推荐的链接都没有提供对我有用的答案。我搜索了 Google 和 YouTube,但没有相关结果。

我正在尝试找到我已经能够完成的页面上的每个链接,甚至列出我认为这只是一个默认测试。我什至让它打印链接的文本,但是当我尝试单击链接时它不起作用。我尝试过各种等待,包括 visibility_of_any_elements_located AND time.sleep(5) 在尝试单击链接之前等待。 在等待self.driver.find_element(By.LINK_TEXT, ("lnktxt")).click() 后,我尝试过点击链接。但是没有一个工作,不是在下面的代码中,下面的代码工作,再次列出由变量定义的 URL 文本、URL 和 URL 文本。

我想我不确定如何将变量放入 By.LINK_TEXT 或 ...by_link_text 语句中,假设这可行。我想如果我将它放入变量中,我可以再次使用它。这适用于打印,但不适用于 click()

我基本上希望能够加载一个页面,列出所有链接,单击一个链接,返回并单击下一个链接等。

该网站推荐的唯一可能有用的帖子是... How can I test EVERY link on the WEBSITE with Selenium 但它是基于 Java 的,过去一个月我一直在尝试学习 Python,所以我还没有准备好学习 Java 只是为了完成这项工作。 IDE 似乎没有一个简单的选择,或者从我的所有搜索中它没有很好地记录。

这是我当前使用 Python 编写的 Selenium 代码。

import pytest
import time
import json
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

wait_time_out = 15

class TestPazTestAll2():
  def setup_method(self, method):
    driver = webdriver.Firefox()
    self.driver = webdriver.Firefox()
    self.vars = {}

  def teardown_method(self, method):
    self.driver.quit()
  
  def test_pazTestAll(self):
    self.driver.get('https://poetaz.com/poems/')
    lnks=self.driver.find_elements_by_tag_name("a")
    print ("Total Links", len(lnks))
    # traverse list
    for lnk in lnks:
        # get_attribute() to get all href
        print(lnk.get_attribute("text"))
        lnktxt = (lnk.get_attribute("text"))
        print(lnk.get_attribute("href"))
        print(lnktxt)
    driver.quit()

再次,我确定我在搜索中遗漏了某些内容,但经过数小时的搜索后,我正在联系我们。

感谢任何帮助。

【问题讨论】:

    标签: python selenium testing automated-tests pytest


    【解决方案1】:

    我基本上希望能够加载一个页面,列出所有链接,单击一个链接,返回并单击下一个链接等。

    我不建议这样做。 Selenium 和操作浏览器的速度很慢,而且您并没有真正将浏览器用于您真正需要浏览器的任何事情。

    我推荐的只是向那些抓取的链接发送请求并声明响应状态代码。

    import requests
    
    link_elements = self.driver.find_elements_by_tag_name("a")
    urls = map(lambda l: l.get_attribute("href"), link_elements)
    for url in urls:
        response = requests.get(url)
        assert response.status_code == 200
    

    (您可能还需要在 href 属性中找到的那些字符串前面添加一些基本 url。)

    【讨论】:

    • 谢谢,我会试试那个选项。正如我所提到的,我仍在学习,所以我只是认为 Selenium 用于所有测试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 2021-02-08
    • 2010-11-30
    • 2018-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多