【问题标题】:use of If function in selenium python在 selenium python 中使用 If 函数
【发布时间】:2021-04-13 15:17:19
【问题描述】:

下面是我想要检查“测试”的 HTML,如果存在我想点击 rtPlus

</div></li><li class="rtLI rtLast"><div class="rtBot rtSelected TreeNodeSelect sonetto-children">
                                <span class="rtSp"></span><span class="rtPlus"></span><span class="rtIn TreeNode sonetto-children">test</span>

enter image description here

我的代码

ul = driver.find_element_by_xpath("//div[@id='ctl00_ctl00_ContentPlaceHolderContent_MainCategoriserContent_Results1_ResultsTree1_radTree']/ul//ul")
ul = ul.find_element_by_xpath("./li[./div/span[text()='{}']]/ul//li[./div/span[text()='{}']]".format(levels[0],levels[1]))
if ul.text == 'test':
    ul = ul.find_element_by_xpath("//span[@class='rtPlus']").click()

希望这些信息足够了,请让我知道在这里可以做什么点击加号图标

【问题讨论】:

  • 您的问题是什么?当你运行这段代码时会发生什么?你想让它做什么呢?
  • 旁注:不要将同一个变量用于多种用途。相反,您可以将每个事物分配给一个新变量。
  • 为页面添加html代码或链接
  • 我认为您在此处发布的代码没有任何问题。我建议您进行一些调试,以确保您选择的元素是您认为的。
  • @ArjunMunirathinam 请edit您的问题添加对运行代码时发生的情况的描述。您关于单击错误加号的评论是您原始问题中未包含的重要细节。

标签: python selenium xpath webdriver


【解决方案1】:

您可以使用任一 xpath 来完成您的任务。

找到带有文本的span标签作为测试,然后使用previous-sibling

driver.find_element_by_xpath("//span[text()='test']/preceding-sibling::span[@class='rtPlus']").click()

或者查找li标签,其child标签文本为test,并找到next child

driver.find_element_by_xpath("//li[.//span[text()='test']]//span[@class='rtPlus']").click()

如果你知道 ul 标签,那也是同样的方法。

ul.find_element_by_xpath(".//span[text()='test']/preceding-sibling::span[@class='rtPlus']").click()

ul.find_element_by_xpath(".//li[.//span[text()='test']]//span[@class='rtPlus']").click()

【讨论】:

    【解决方案2】:

    当我运行我的代码时,它会打开页面上的第一个加号,但我希望它打开测试旁边的加号

    听起来您点击的加号与您想要的不同。您需要编写更复杂的算法来找到要单击的正确元素。我的建议是这样的:

    get the <ul> element
    get all <li> elements inside the <ul>
    for each <li>
        if it has "test" in the text
            click on it
    

    因此,您需要学习如何获取与给定 css 选择器匹配的所有元素。然后你需要学习如何循环这些元素。

    【讨论】:

      【解决方案3】:

      你应该做的原始版本是:

      ul = driver.find_element_by_xpath("text locator")
      button = ul.find_element_by_xpath("button locator")
      if ul.text == 'test':
          button.click()
      

      如果此按钮位于您的 ul 元素内,则为这种情况。

      【讨论】:

      • 这与 OP 发布的代码有何不同?
      • 他有两个ul 变量和一些正确定义定位器的问题。
      • 我同意使用不同的变量是个好主意。但是,仅此一项不可能解决 OP 的问题。
      • 是的,我确定他在正确定义定位器方面存在问题
      • 但是您的回答没有提到这一点,也没有提供有关如何制作正确定位器的任何细节。
      猜你喜欢
      • 2021-12-08
      • 2020-06-09
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 2012-12-14
      • 1970-01-01
      • 2020-11-20
      相关资源
      最近更新 更多