首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XPath:元素在DOM中有点缺失,但仍然存在,或者类似的东西。

XPath:元素在DOM中有点缺失,但仍然存在,或者类似的东西。
EN

Stack Overflow用户
提问于 2020-12-13 22:30:48
回答 3查看 260关注 0票数 0

我尝试使用XPath检查(单击)此复选框,但到目前为止,我的所有尝试都失败了,因为它们单击了图例中的链接(Lorem )

HTML源:

代码语言:javascript
复制
<div class="input-outer checkbox">
   <div class="section-head sec-head2">
      <!---->
      <div class="pull-left">Tick this box</div>
      <!----><!---->
      <p aria-label="required" class="requiredAsteric">*</p>
   </div>
   <div class="input-validation">
      <div class="input-icon-outer">
         <!---->
         <!---->
         <!---->
         <!---->
         <input class="filled-in ng-untouched ng-pristine ng-invalid" type="checkbox" aria-label="Acceptera villkor" aria-required="true" aria-describedby="err_icon_prefix2_1" id="icon_prefix2_1"><!---->
         <label class="leadform-checkbox" tabindex="0" for="icon_prefix2_1">
            <div>
               <p>Lorem ipsum dolor sit amet, consectetur  <a href="https://www.google.com" target="_blank">adipiscing elit</a> adipiscing elit , sed do <a href="https://www.stackexchange.com" target="_blank">eiusmod tempor </a> incididunt ut labore et dolore magna aliqua.</p>
            </div>
         </label>
         <!---->
      </div>
   </div>
</div>

到目前为止,我已经尝试过这三种XPaths,但它们都不起作用。

代码语言:javascript
复制
//label[@class='leadform-checkbox']/div";
//input[@aria-label='Tick this box']";
(//div[@class='input-icon-outer'])[3]";

如果我正确理解HTML (我可能不理解),他们就不会使用内置到HTML中的复选框功能,而是创建了一个CSS类,其中包含一个看起来像复选框的图形元素。现在,当我向使用这种样式的div发送单击时,单击结束于div的文本内容,而不是复选框,然后单击找到的链接。

我对事情的理解正确吗?我如何修复这个/直接点击到广场?

编辑:在这个“对话框”中还有另外两个文本字段。使用这两个XPaths访问它们没有问题:

代码语言:javascript
复制
String xpText = "//input[@aria-label='text']";
String xpNumber = "//input[@aria-label='number']";

这三个元素都在同一个iframe中。在这些步骤之前,我在main content和不同的iframes之间执行几个开关。

heading 2.2位于上面HTML源代码的屏幕截图顶部的<div class="input-outer">中,所以我很确定我在正确的框架/内容中。此外,我可以访问属于此复选框的文本中的链接。

包括下面的整个对话框,以使它更容易得到一个概述。

EN

回答 3

Stack Overflow用户

发布于 2020-12-13 22:42:01

//input[@aria-label='Tick this box']应该能做到这一点。

票数 1
EN

Stack Overflow用户

发布于 2020-12-19 20:26:53

当您检查元素时,请确保您正在使用HTML中的行,这是所需元素的突出显示。如果它不能工作,请确保页面中没有

票数 0
EN

Stack Overflow用户

发布于 2020-12-24 13:59:43

若要在复选框上使用click(),可以使用下列基于xpath定位器策略之一

  • 使用<label>标记属性: driver.find_element_by_xpath("//label@for='icon_prefix2_1'").click()
  • 使用<p>标记属性: driver.find_element_by_xpath("//label@class='leadform-checkbox'.//pcontains(.,'Lorem ipsum dolor sit amet‘)]//前面::input1 1“).click()
  • 使用<input>标记属性: driver.find_element_by_xpath("//input@class='filled-in ng-未接触ng-原始ng-无效‘和@aria-标签=’受主翅目绒毛‘).click()

理想情况下,要单击需要为WebDriverWait诱导element_to_be_clickable()的元素,可以使用以下基于xpath定位器策略之一

  • 使用<label>标记属性: (驱动程序,20).until(EC.element_to_be_clickable((By.XPATH,“//label@WebDriverWait=‘图标_前缀2_1’”).click()
  • 使用<p>标记属性: 20).until(EC.element_to_be_clickable((By.XPATH,"//label@class='leadform-checkbox'.//pcontains(.,'Lorem ipsum dolor WebDriverWait]//WebDriverWait::input1 1“)).click()
  • 使用<input>标记属性: (驱动程序,20).until(EC.element_to_be_clickable((By.XPATH,“//input@class=‘WebDriverWait=’填充ng-未触及的ng-原始ng-无效‘和@aria-label='Acceptera’)).click()
  • 注意事项:您必须添加以下导入: 从selenium.webdriver.support.ui导入WebDriverWait从selenium.webdriver.common.by导入从selenium.webdriver.support导入expected_conditions作为EC
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65281371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档