gpt4 book ai didi

javascript - 在 Selenium 中使用 Java Script Executor 时无法读取未定义的属性 'click'

转载 作者:行者123 更新时间:2023-11-30 19:59:45 24 4
gpt4 key购买 nike

我收到一个错误:

Cannot read property 'click' of undefined

尝试使用 java 脚本执行器单击按钮时。我尝试了许多不同的方法来使用操作类、webdriverwait 等来单击按钮,但似乎都没有用。Java 脚本在控制台中工作,但是当我在我的代码中使用时,我无法单击按钮并出现上述错误

html dom 如下所示:

<div>
<a class="button button--new-resource" href="/admin/certificate_types/new">
<img src="/assets/icon-add-user-e2a98953aa1855b15304eb16415b536ee92e579ce89f429bcdd062faa855e261.svg" alt="Icon add user"> New Certificate Type
</a>
</div>

我的selenium脚本如下

JavascriptExecutor js=(JavascriptExecutor) driver;        
js.executeScript("var x= document.getElementsByClassName('button button--new-resource')[0];"+"x.click();");

最佳答案

这个错误信息...

Cannot read property 'click' of undefined

...表示 click() 方法不能作为 WebElement 执行尚未在 DOM Tree 中完全呈现并且该元素仍处于未定义状态。


详情

正如您提到的,“Java Script is working in console” 这意味着 JavaScript 是完美的。主要问题是元素没有在 HTML DOM 中完全呈现。 .


解决方案

作为解决方案,你需要诱导你需要诱导WebDriverWait对于 visibilityOfAllElementsLocatedBy(),您可以使用以下任一 Locator Strategies :

  • 使用 cssSelector:

    new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector(".button.button--new-resource")));
    ((JavascriptExecutor) driver).executeScript("var x= document.getElementsByClassName('button button--new-resource')[0];"+"x.click();");
  • 使用 xpath:

    new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//*[@class='button button--new-resource']")));
    ((JavascriptExecutor) driver).executeScript("var x= document.getElementsByClassName('button button--new-resource')[0];"+"x.click();");

最佳实践

但是,根据最佳实践点击您需要诱导的元素WebDriverWait对于 element_to_be_clickable(),您可以使用以下任一项 Locator Strategies :

  • 使用 CSS_SELECTOR:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a.button.button--new-resource[href='/admin/certificate_types/new']>img[alt='Icon add user']"))).click()
  • 使用 XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='button button--new-resource' and @href='/admin/certificate_types/new']/img[@alt='Icon add user']"))).click()
  • 注意:您必须添加以下导入:

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

关于javascript - 在 Selenium 中使用 Java Script Executor 时无法读取未定义的属性 'click',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53514947/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com