Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript XPath:DOM中缺少元素,但仍然存在,或者类似的东西_Javascript_Selenium_Selenium Webdriver_Xpath_Webdriverwait - Fatal编程技术网

Javascript XPath:DOM中缺少元素,但仍然存在,或者类似的东西

Javascript XPath:DOM中缺少元素,但仍然存在,或者类似的东西,javascript,selenium,selenium-webdriver,xpath,webdriverwait,Javascript,Selenium,Selenium Webdriver,Xpath,Webdriverwait,我尝试使用XPath检查(单击)此复选框,但到目前为止我的所有尝试都失败了,因为他们单击了图例中的链接(Lorem ipsum) HTML来源: 如果我正确理解HTML(我可能不理解),他们不会使用HTML中内置的复选框功能,而是创建了一个CSS类,其中包含一个看起来像复选框的图形元素。现在,当我向使用这种样式的div发送一个单击时,单击的结果是div的文本内容,而不是复选框,然后单击在那里找到的链接 我理解得对吗?如何修复此问题/将单击指向正方形 编辑:此“对话框”中还有两个其他文

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



HTML来源:



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

我理解得对吗?如何修复此问题/将单击指向正方形

编辑:此“对话框”中还有两个其他文本字段。我可以通过这两个XPath访问它们:

String xpText = "//input[@aria-label='text']";
String xpNumber = "//input[@aria-label='number']";
这三个元素都在同一个
iframe
中。在执行这些步骤之前,我在
主要内容
和不同的
iFrame
之间执行了几次切换

标题2.2
位于上方HTML源代码屏幕截图顶部可见的
中,因此我非常确定我的框架/内容正确。此外,我可以访问文本中属于此复选框的链接

包括下面的整个对话框,以便更容易获得概述



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

检查元素时,请确保使用的是HTML中突出显示的所需元素的行。如果不起作用,请确保复选框上没有To
click()
,您可以使用以下任一选项:

  • 使用
    标记属性:

    driver.find_element_by_xpath("//label[@for='icon_prefix2_1']").click()
    
    driver.find_element_by_xpath("//label[@class='leadform-checkbox'][.//p[contains(., 'Lorem ipsum dolor sit amet')]]//preceding::input[1]").click()
    
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[@for='icon_prefix2_1']"))).click()
    
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[@class='leadform-checkbox'][.//p[contains(., 'Lorem ipsum dolor sit amet')]]//preceding::input[1]"))).click()
    
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='filled-in ng-untouched ng-pristine ng-invalid' and @aria-label='Acceptera villkor']"))).click()
    
  • 使用
    标记属性:

    driver.find_element_by_xpath("//label[@for='icon_prefix2_1']").click()
    
    driver.find_element_by_xpath("//label[@class='leadform-checkbox'][.//p[contains(., 'Lorem ipsum dolor sit amet')]]//preceding::input[1]").click()
    
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[@for='icon_prefix2_1']"))).click()
    
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[@class='leadform-checkbox'][.//p[contains(., 'Lorem ipsum dolor sit amet')]]//preceding::input[1]"))).click()
    
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='filled-in ng-untouched ng-pristine ng-invalid' and @aria-label='Acceptera villkor']"))).click()
    
  • 使用
    标记属性:

    driver.find_element_by_xpath("//input[@class='filled-in ng-untouched ng-pristine ng-invalid' and @aria-label='Acceptera villkor']").click()
    

理想情况下,要单击需要导入的元素,使
元素可单击()
,您可以使用以下任一选项:

  • 使用
    标记属性:

    driver.find_element_by_xpath("//label[@for='icon_prefix2_1']").click()
    
    driver.find_element_by_xpath("//label[@class='leadform-checkbox'][.//p[contains(., 'Lorem ipsum dolor sit amet')]]//preceding::input[1]").click()
    
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[@for='icon_prefix2_1']"))).click()
    
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[@class='leadform-checkbox'][.//p[contains(., 'Lorem ipsum dolor sit amet')]]//preceding::input[1]"))).click()
    
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='filled-in ng-untouched ng-pristine ng-invalid' and @aria-label='Acceptera villkor']"))).click()
    
  • 使用
    标记属性:

    driver.find_element_by_xpath("//label[@for='icon_prefix2_1']").click()
    
    driver.find_element_by_xpath("//label[@class='leadform-checkbox'][.//p[contains(., 'Lorem ipsum dolor sit amet')]]//preceding::input[1]").click()
    
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[@for='icon_prefix2_1']"))).click()
    
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[@class='leadform-checkbox'][.//p[contains(., 'Lorem ipsum dolor sit amet')]]//preceding::input[1]"))).click()
    
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='filled-in ng-untouched ng-pristine ng-invalid' and @aria-label='Acceptera villkor']"))).click()
    
  • 使用
    标记属性:

    driver.find_element_by_xpath("//label[@for='icon_prefix2_1']").click()
    
    driver.find_element_by_xpath("//label[@class='leadform-checkbox'][.//p[contains(., 'Lorem ipsum dolor sit amet')]]//preceding::input[1]").click()
    
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[@for='icon_prefix2_1']"))).click()
    
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[@class='leadform-checkbox'][.//p[contains(., 'Lorem ipsum dolor sit amet')]]//preceding::input[1]"))).click()
    
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='filled-in ng-untouched ng-pristine ng-invalid' and @aria-label='Acceptera villkor']"))).click()
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

你能把HTML放在问题中吗?如果你说“他们不使用HTML内置的复选框功能,而是创建了一个CSS类,其中包含一个看起来像复选框的图形元素”,那么图片就很难调试了,注意,就在你的屏幕截图中心上方,你有
@RichEdwards我试过点击它,但它只是返回
org.openqa.selenium.elementnotinteractivatableexception:element notinteractivatable
@Bravo更新了源代码。是否有
frame
iframe
存在它看起来像是
//input[@aria label=“Acceptera villkor”]
不起作用,已经试过了(我忘了在问题中包括这个)。返回
org.openqa.selenium.elementnotinteractitableexception:element notinteractitable
@hensti,尝试定义是否有两个输入节点。或者试试XPATH
(//input[@aria label='Tick this box'])[2]
只有一个,但是当我点击它时,它会点击文本中的链接,而不是复选框:-(奇怪的是,如果我使用上面评论中的XPATH,而不是发送
click()
而不是发送
isSelected()
我得到了正确的回答。不知何故,
单击
似乎优先于复选框的文本链接。@hensti这很奇怪:)也许你应该尝试通过JavaScriptExecutor单击它?