Невозможно найти кнопку или ссылку, используя селектор xpath, id, name или css - PullRequest
0 голосов
/ 16 апреля 2019

Невозможно найти элемент, используя id / name / xpath / CSSSelector

Попробовал приведенные ниже коды и оба не смогли дать ответ

wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\'form\']/p/button/span")));
driver.findElement(By.xpath("//*[@id=\'form\']/p/button/span")).click();

и

WebElement checkout = driver.findElement(By.xpath("//[@id=\'form\']/p/button/span"));
checkout.click();

HTML

 <button type="submit" name="processCarrier" class="button btn btn-default standard-checkout button-medium" style="">
    <span> Proceed to checkout <i class="icon-chevron-right right"></i> </span>
 </button>

Ответы [ 3 ]

0 голосов
/ 16 апреля 2019

Возможно, вы получаете org.openqa.selenium.InvalidSelectorException, потому что вы должны использовать * после //, чтобы соответствовать любому узлу (тегу), у которого есть id=form или конкретное имя тега.

изменить на //*[@id='form']/p/button/span

Или используйте более конкретное значение, например

xpath : //button[@name='processCarrier'] эквивалент CSS : button[name='processCarrier']

И использовать неявное / явное ожидание, чтобы сделать элемент доступным в DOM для выполнения действий.

0 голосов
/ 16 апреля 2019

Предположительно, вы вызовете click() для элемента <button>, поэтому вам нужно настроить WebDriverWait , чтобы требуемый элемент был кликабельным , и вы можете использовать любой из следующих Стратегии локатора :

  • cssSelector:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("button.standard-checkout.button-medium[name='processCarrier']>span"))).click();
    
  • xpath:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//button[@class='button btn btn-default standard-checkout button-medium' and @name='processCarrier']/span"))).click();
    
0 голосов
/ 16 апреля 2019

Попробуйте следующий CSS Selector.

WebElement checkout = driver.findElement(By.cssSelector("button.standard-checkout span"));
checkout .click();

Или вы можете использовать WebDriverWait и Css Selector.

WebDriverWait wait = new WebDriverWait(driver, 30);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("button.standard-checkout span")));
element.click()
...