【问题标题】:Unable to click button using Selenium JavaScript使用 Selenium JavaScript 无法单击按钮
【发布时间】:2019-10-20 11:02:07
【问题描述】:

我无法点击登录按钮,我的代码是正确的并且没有 iframe 或窗口:

const { Builder, By, Key, until } = require('selenium-webdriver');
const { expect } = require('chai');

describe('SignupTest', () => {
    const driver = new Builder().forBrowser('chrome').build();

    it('signup with valid email and valid password', async () => {
        await driver.get('https://ca.letgo.com/en');
        const loginButton = driver.findElement(By.xpath("//button[contains(.,'Log In')]"));
        driver.execute("arguments[0].click()",loginButton)
        //await driver.findElement(By.xpath("//button[contains(.,'Log In')]")).click();
        //name=email
        //name=password
        //name=name
        //xpath=//span[contains(.,'Sign Up')]
        //await driver.sleep(20000);
    });

【问题讨论】:

  • 您是否在控制台中遇到任何错误?
  • 您是否尝试检查使用findElements定位器标识的元素?
  • @supputuri,不,它不起作用
  • 表示 xpath 不正确或者它可能在某些 iframe 中。你能在 chrome 开发工具中检查这两个条件吗?
  • @supputuri 我认为没有 iframe。你可以在这里查看吗 - ca.letgo.com/en

标签: javascript selenium selenium-webdriver xpath css-selectors


【解决方案1】:

如果您的目标是使用 javascript 来运行 selenium 方式。我建议你 使用 nightwatch js,它使用 selenium 和 node js。

在您的情况下,您可以执行以下操作。

WebDriverWait wait = new WebDriverWait(webDriver, timeoutInSeconds);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id<locator>));

wait.until(ExpectedConditions.elementToBeClickable(By.id<locator>));

您还可以使用isDisplay() 在点击前检查可见性。如果打印为 true,则执行单击操作。

【讨论】:

    【解决方案2】:

    文本为 Log In 的元素实际上位于 child &lt;span&gt; 标记(&lt;button&gt; 标记)内,您可以使用以下任一 @ 987654321@:

    • 使用CSS_SELECTOR

      button[data-test='login'][data-testid='login']>span
      
    • 使用XPATH

      //span[text()='Log In']
      

    注意:当您尝试在文本为 Log In 的元素上调用 click() 时,需要诱导 WebDriverWait。 p>

    【讨论】:

      猜你喜欢
      • 2019-05-30
      • 2019-09-04
      • 2021-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多