使用Selenium Javasript无法单击按钮

时间:2019-06-04 22:07:35

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

我无法单击登录按钮,我的代码正确,并且没有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);
    });

2 个答案:

答案 0 :(得分:0)

文本为登录的元素实际上位于 child <span>标签的{em> child 标签中,您可以使用其中一个以下Locator Strategies中的

  • 使用<button>

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

    XPATH

注意:当您尝试在元素上使用文本登录来调用//span[text()='Log In'] 时,需要引发 WebDriverWait

答案 1 :(得分:0)

如果您的目标是使用javascript来运行硒手段。我建议你 使用使用硒和节点js的守夜js。

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

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

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

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