Ожидание видимости элемента, расположенного по By.xpath

Не могли бы вы взглянуть, скажите мне, почему я не могу найти определенный класс, который появляется после того, как я нажал кнопку.

  1. нажмите кнопку переключения, и кнопка регистрации должна быть активирована, что и есть.
  2. затем пытается найти класс, связанный с этой кнопкой, и щелкнуть по нему, и он говорит, что не может найти его.

изображение

chromeDriver.findElement(By.xpath("//input[@name='email']")).sendKeys("[email protected]");
chromeDriver.findElement(By.xpath("//input[@name='password']")).sendKeys("test");
chromeDriver.findElement(By.xpath("//div[@class='button button-primary button-disabled']"));
chromeDriver.findElements(By.xpath("//div[@class='sign-up-row']")).get(1).click();
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='button button-primary']")));

or

wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@class='button button-primary']"))).click();

или он обнаруживает класс, но элемент не взаимодействует

 chromeDriver.findElement(By.xpath("//div[@class='button button-primary']")); 

  

person Artur Bo    schedule 16.09.2020    source источник
comment
Что за сообщение об ошибке? А что вы хотите делать с первичной кнопкой?   -  person Yun    schedule 16.09.2020


Ответы (3)


вы можете попробовать дождаться невидимости вашей анимации прогресса, а затем найти свой элемент или дождаться непосредственно элемента регистрации

wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[contains(text(), 'Sign up')]"))).click();

или используйте опрос

WebDriverWait wait = new WebDriverWait(driver, 15);
wait.pollingEvery(1, TimeUnit.SECONDS);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[contains(text(), 'Sign up')]"))).click();
person Alin Stelian    schedule 16.09.2020

Вы можете использовать локатор ниже.

wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='button-hover-wrapper']//div[contains(text(), 'Sign up')]"))).click();

or

wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='button button-primary']//div[contains(text(), 'Sign up')]"))).click();
person Dilip Meghwal    schedule 16.09.2020
comment
Большое спасибо, чувак, не могли бы вы сказать мне, может быть, почему это не сработало раньше, когда я все равно ждал элемент - person Artur Bo; 16.09.2020
comment
Это произошло из-за того, что вы пытаетесь щелкнуть элемент //div[@class='button button-primary'], и я получал щелчок, но подпрограмма div, содержащая sign up, не получала щелчка, чтобы двигаться дальше. Если ответили, отметьте вопрос как отвеченный. - person Dilip Meghwal; 16.09.2020

Чтобы click() на Зарегистрироваться вместо visibilityOfElementLocated(), вам нужно вызвать WebDriverWait для elementToBeClickable(), и вы можете использовать любое из следующих Стратегии поиска:

  • cssSelector:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("div.sign-up-row +p +div > div.button-inner"))).click();
    
  • xpath:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@class='button button-primary']//div[@class='button-inner' and text()='Sign up']"))).click();
    

использованная литература

Вы можете найти пару соответствующих обсуждений в:

person DebanjanB    schedule 16.09.2020