如何在出现 NoSuchElement 异常时通过链接文本查找元素?

2023-12-05

这个问题已经被问了一遍又一遍——尽管尝试了所有的技巧,我似乎仍然无法弄清楚出了什么问题。

我尝试将implicitly_wait增加到30(甚至增加到100) - 但它不起作用。

Use case-:我正在尝试创建一个列表来填充页面中的所有项目here,作为基本情况 - 我打算将其绑定到我已经使用 scrapy 拥有的迷你模块,该模块具有所有(具有相似网络元素的页面)爬行链接 - 因此基本上将构建整个管道,在我完成后这。

###My source code - generated via Selenium IDE, exported to a Python webdriver and manipulated a little later ###

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.support.wait import WebDriverWait
import unittest, time, re

class Einstein(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(30)
        self.base_url = "http://shopap.lenovo.com/in/en/laptops/"
        self.verificationErrors = []
        self.accept_next_alert = True

    def test_einstein(self):
        driver = self.driver
        driver.get(self.base_url)
        print driver.title
        driver.find_element_by_link_text("T430").click()
        print driver.title
#       driver.find_element_by_xpath("id('facetedBrowseWrapper')/div/div/div[1]/div[2]/ul[1]/li[1]/a").click()
        driver.find_element_by_xpath("//div[@id='subseries']/div[2]/div/p[3]/a").click()
        print driver.title
       # driver.find_element_by_xpath("//div[@id='subseries']/div[2]/div/p[3]/a").click()
        try: self.assertEqual("Thinkpad Edge E530 (Black)", driver.find_element_by_link_text("Thinkpad Edge E530 (Black)").text)
        except AssertionError as e: self.verificationErrors.append(str(e))
       # Everything ok till here

        #**THE CODE FAILS HERE**#
        laptop1 = driver.find_element_by_link_text("Thinkpad Edge E530 (Black)").text
        print laptop1
        price1 = driver.find_element_by_css_selector("span.price").text
        print price1
        detail1 = self.is_element_present(By.CSS_SELECTOR, "div.desc.std")
        print detail1

            def is_element_present(self, how, what):
        try: self.driver.find_element(by=how, value=what)
        except NoSuchElementException, e: return False
        return True

    def is_alert_present(self):
        try: self.driver.switch_to_alert()
        except NoAlertPresentException, e: return False
        return True

    def close_alert_and_get_its_text(self):
        try:
            alert = self.driver.switch_to_alert()
            alert_text = alert.text
            if self.accept_next_alert:
                alert.accept()
            else:
                alert.dismiss()
            return alert_text
        finally: self.accept_next_alert = True

    def tearDown(self):
        self.driver.quit()
        self.assertEqual([], self.verificationErrors)

if __name__ == "__main__":
    unittest.main()


Errors & output :
ekta@ekta-VirtualBox:~$ python einstein.py
Laptops & Ultrabooks | Lenovo (IN)
ThinkPad T430 Laptop PC for Business Computing | Lenovo (IN)
Buy Lenovo Thinkpad Laptops | Lenovo Thinkpad Laptops Price India
E
======================================================================
ERROR: test_einstein (__main__.Einstein)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "einstein.py", line 27, in test_einstein
    try: self.assertEqual("Thinkpad Edge E530 (Black)", driver.find_element_by_link_text("Thinkpad Edge E530 (Black)").text)
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 246, in find_element_by_link_text
    return self.find_element(by=By.LINK_TEXT, value=link_text)
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 680, in find_element
    {'using': by, 'value': value})['value']
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 165, in execute
    self.error_handler.check_response(response)
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 158, in check_response
    raise exception_class(message, screen, stacktrace)
NoSuchElementException: Message: u'Unable to locate element: {"method":"link text","selector":"Thinkpad Edge E530 (Black)"}' ; Stacktrace: 
    at FirefoxDriver.prototype.findElementInternal_ (file:///tmp/tmphli5Jg/extensions/[email protected]/components/driver_component.js:8444)
    at fxdriver.Timer.prototype.setTimeout/<.notify (file:///tmp/tmphli5Jg/extensions/[email protected]/components/driver_component.js:386) 

----------------------------------------------------------------------
Ran 1 test in 79.348s

FAILED (errors=1)

问题和评论:

  1. 如果您正在回答这个问题 - 请说明为什么这个特定的“find_element_by_link_text”不起作用。

  2. (非常基本)在我的 selenium IDE 的 GUI 中 -> 显示所有可用命令 - 为什么我看不到所有 Web 元素的 css (find_element_by_css_selector) -有没有办法强制将元素读取为 CSS 选择器?

  3. 如果您建议使用其他定位器 - 请提及这是否是获取元素的一致方式,给定 (1)

  4. 断言是否可以捕获异常并“继续” - 因为即使在尝试“验证”、“断言”循环之后,我仍然无法获取此“find_element_by_link_text”

  5. 我尝试使用 Xpath 来构建这个“元素”,但是在视图 Xpath (在 firefox 中)中 - 我什么也没看到,以了解为什么会发生这种情况(当然我删除了名称空间 ":x" )

除了我尝试过的其他事情implicity_wait(30):

find_element_by_partial_link(“Thinkpad”) and appending Unicode to this (wasn’t sure if it was reading the brackets ( , driver.find_element_by_link_text(u"Thinkpad Edge E530 (Black)").text, still did not work.

相关问题:

  • 如何正确使用 find_element_by_link_text() 不引发 NoSuchElementException?
  • 当implicitly_wait不起作用时使用find_element_by_link_text出现NoSuchElement异常?

之前我也遇到过这样的事find_element_by_link_text方法有时有效,有时无效;即使在单个案例中。我认为这不是访问元素的可靠方法;最好的方法是使用find_element_by_id.

但就你而言,当我访问该页面时,没有 id 可以帮助你。还是可以尝试一下find_elements_by_xpath有3种方式:

1- 访问标题:find_element_by_xpath["//a[contains(@title = 'T430')]"]

2- 访问文本:find_element_by_xpath["//a[contains(text(), 'T430')]"]

3-访问href:find_element_by_xpath["//a[contains(@href = 'http://www.thedostore.com/laptops/thinkpad-laptops/thinkpad-t430-u-black-627326q.html')]"].

希望能帮助到你。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在出现 NoSuchElement 异常时通过链接文本查找元素? 的相关文章

随机推荐

  • MagicalRecord 日期解析

    我有一个以下格式的日期 2013 05 04T05 07 09 00 00 我正在使用 MagicalRecord 自动映射 NSDate 据我所知 上面的日期格式应该符合 MagicalRecord 的默认日期格式 yyyy MM dd
  • 使用 jquery Validate 的长表单导致 IE 缓慢脚本警告

    我一直在使用 jquery 验证插件http bassistance de jquery plugins jquery plugin validation 它一直工作成功 尽管现在我有一个带有表格的表单 大约有 100 行 每行都有一个输入
  • 在资源管理器视图中单击文件后如何将焦点设置到编辑器?

    通过在资源管理器视图中单击选择文件时 它会打开 但焦点仍保留在资源管理器视图中 在旧版本中 焦点将移动到生成的编辑器 我知道可以绑定一个键将焦点移动到文件的编辑器 但我更喜欢将焦点移动到那里 Otherwise I select a fil
  • 将图例添加到 ggplot2 散点图,包括附加线

    我想添加一个图例ggplot2散点图 它区分回归线和我添加的单独线 例如 library ggplot2 set seed 123 data1 rnorm 1000 1 2 data2 rnorm 1000 1 4 DF data fram
  • 来自位智的交通数据

    在我的工作中 我们需要位智的交通或移动数据 在这次大流行中 我看到了一些关于 Covid 19 的研究 在某些情况下他们使用 Waze 数据库 我怎样才能获得这些信息 If by 交通数据您的意思是位智估计的行程时间可以到达他们的网站实时地
  • 如何在 Django 中比较日期时间?

    假设我有 ds datetime datetime now dd Entry objects get pk id pub date 如何比较上面的两个对象 我想知道他们之间的时差 请帮我解决这个问题 非常感谢 我假设pub date is
  • AVD 设置中缺少“快照”和“使用主机 GPU”选项

    我刚刚开始使用Android Studio 在网上查看了一些教程 在创建或编辑Android虚拟设备时应该有这2个选项 现在就我而言 我在任何地方都看不到它 模拟性能 中的 使用主机 GPU 是否已重命名为 硬件 GLES 2 0 如果是这
  • 扩展rank()“奥林匹克风格”

    在奥运会上 如果两人并列银牌 他们不会颁发铜牌 以下是我正在使用的数据类型的示例 x lt c 0 64 0 64 0 63 0 62 0 62 0 62 0 61 0 6 0 6 0 58 我想创建一个排名函数 其输出如下 rank fu
  • 将 Varchar 转换为十进制并出现千位分隔符错误

    今天我想知道为什么这些简单的sql语句返回错误而不是成功执行 GO SELECT CAST 1 234 00 AS DECIMAL 22 2 GO SELECT CONVERT DECIMAL 22 2 1 234 00 如果删除千位分隔符
  • CSS 表达式

    我在某处读到 CSS 表达式已被弃用 甚至不应该使用 我从未听说过它们 决定去看看 我找到了一个代码示例 即使您滚动 也可以将浮动元素保留在屏幕上的同一位置 p Here is some text which is fixed p p ma
  • 将图像复制并粘贴到模拟器中的教科书中

    我正在手动设置粘贴板中复制的内容 IBAction func onOkPressed button UIButton var testImage getImageWithColor UIColor redColor size CGSize
  • 如何在 Python 中分块循环遍历二进制文件

    我正在尝试使用 Python 循环一个充满 8 字节记录的长二进制文件 每条记录都有格式 uint16 uint16 uint32 这是 HHI 在结构格式中 显然每个 8 字节块都被视为一个int 而不是一个 8 字节数组 然后导致str
  • 用于创建 Confluence 页面的 Google Apps 脚本 - 导致状态代码 500

    注意 我还在 Atlassian 论坛上发布了这个问题 https community atlassian com t5 Confluence questions Google Apps Script to Create Confluenc
  • 致命错误:无法在类路径或 bootclasspath 中找到包 java.lang

    我正在尝试使用node java包 我需要从node js运行小的java代码 首先我运行命令 npm install java 之后我克隆了这个库的源代码 https github com joeferner node java 我使用到
  • JavaScript 有“短路”评估吗?

    我想知道 JavaScript 是否有像这样的 短路 评估 C 中的运算符 如果没有 我想知道是否有可行的解决方法 是的 JavaScript 有 短路 评估 if true foo foo Passes no errors because
  • 进程身份设置为用户的 IIS 7.5 有错误的 USERPROFILE

    首先 这是我关于类似主题的第三个问题 我仍然没有答案 也许只是接近它 参见first second 我的 Web 应用程序 IIS 7 5 下的 ASP NET MVC3 运行 git 来访问一些 github 存储库 当我将我的工作站升级
  • 具有脚本组件和服务引用的 SSIS

    我正在尝试通过 SSIS 获取 BingAds 数据以存储在我们的会计系统中 我已添加服务参考https api sandbox bingads microsoft com Api Advertiser v8 CampaignManagem
  • 具有项目/实体集合的 Spring Cache

    我正在使用 Spring Cache 我在其中传递键的集合 返回的是实体列表 我想让缓存框架了解返回列表中的每个元素都将使用相应的代码进行缓存 目前 似乎关键是整个列表 如果我在后续调用中丢失了一个关键 它会尝试再次重新加载整个集合 Ove
  • 将错误作为异常处理。最好的方法?

    我试图弄清楚是否有比我下面所做的更好或更好的方法来处理 PHP 中的错误 如果出现问题 我想抛出异常parse ini file称呼 这可行 但是有没有更优雅的方法来处理错误 public static function loadConfi
  • 如何在出现 NoSuchElement 异常时通过链接文本查找元素?

    这个问题已经被问了一遍又一遍 尽管尝试了所有的技巧 我似乎仍然无法弄清楚出了什么问题 我尝试将implicitly wait增加到30 甚至增加到100 但它不起作用 Use case 我正在尝试创建一个列表来填充页面中的所有项目here