Есть код
wait = WebDriverWait(driver, 10)
pl_ctrl = WebDriverWait(driver, 10).until(
EC.presence_of_element_located(( By.XPATH, “//div[contains(@class , ‘bar__content’)]” ))
)
pl_ctrl = pl_ctrl.find_element_by_xpath(".//div[@class=‘player-controls’]")
inf_curent_track = wait.until( EC.presence_of_element_located((By.XPATH, “.//div[@class=‘player-controls__track-container’]/div/div/div[1]”)) )
как сделать что бы inf_curent_track искал в pl_ctrl ?
Помогите плиз
Defender
(Дмитрий Мирошник)
05.Апрель.2018 19:12:52
#2
Если я ничего не напутал, Вы ищете потомка pl_ctrl.
Самый простой вариант:
el1_xpath = "//div[contains(@class, 'bar__content')]"
el2_xpath = el1_xpath + "//div[@class='player-controls__track-container']/div/div/div[1]"
Ищет всех потомков el1_xpath по указанном пути.
Почитайте вот это
http://onedev.net/post/458
Да , можно сделать полный путь //div[contains(@class , ‘bar__content’)]//div[@class=‘player-controls__track-container’]/div/div/div[1]. Я думал может быть, есть способ как то задать ему искать у родителя.
pl_ctrl = WebDriverWait(driver, 10).until(
EC.presence_of_element_located(( By.CSS_SELECTOR, "div.bar__content" ))
)
pl_ctrl = pl_ctrl.find_element_by_css_selector(".player-controls")
inf_curent_track = WebDriverWait(pl_ctrl, 10).until(EC.presence_of_element_located((By.XPATH, ".//div[@class='player-controls__track-container']/div/div/div[1]"))) # тут тоже сделайте CSS
Вот так.
1 лайк
sergueik
(Сергей Кузьмин)
07.Апрель.2018 12:47:57
#5
@Oleg_Kuzovkov в голом Selenium на java по-моему так не получится WebDriverWait
конструктор ожидает WebDriver
первым аргументом и привести RemoteWebElement
к этому типу вроде не получается - подскажите можно ли ислользовать stock Selenium ExpectedConditions
или только писать свои лямбды с FluentWait
типа
Wait<WebElement> waitElementChildren = new FluentWait<WebElement>(
parentElement).withTimeout(flexibleWait, TimeUnit.SECONDS)
.pollingEvery(pollingInterval, TimeUnit.MILLISECONDS)
.ignoring(NoSuchElementException.class);
childElement = waitElementChildren
.until(new Function<WebElement, WebElement>() {
public WebElement apply(WebElement parent) {
return parent
.findElements(By.cssSelector(...))
.get(0);
}
});
// Assert
assertThat(childElement, notNullValue());
В JAVA все супер строго типизировано. Нашел старый кусок кода где я это решил вот так:
WebDriver driver = Browser.getDriver();
WebDriverWait wait = new WebDriverWait(driver, seconds);
WebElement parentElement = driver.findElement([parent_locator]);
element = wait.until(ExpectedConditions.presenceOfNestedElementLocatedBy(parentElement, [locator_of_a_child]));
Сори если чуть с синтаксисом ошибся, с JAVA не работаю уже 2 года (к счастью )
Это должно Вам помочь.
sergueik
(Сергей Кузьмин)
09.Апрель.2018 15:11:53
#7
о я и забыл какое там море cтатических методов … presenceOfNestedElementLocatedBy
это круто прямо не jave a PHP какой то -)
http://javadox.com/org.seleniumhq.selenium/selenium-support/2.53.0/org/openqa/selenium/support/ui/ExpectedConditions.html
org.openqa.selenium.support.ui.ExpectedConditions
Modifier and Type Method and Description
static ExpectedCondition<org.openqa.selenium.Alert> alertIsPresent()
static ExpectedCondition<Boolean> and(ExpectedCondition<?>... conditions)
static ExpectedCondition<Boolean> attributeContains(org.openqa.selenium.By locator, String attribute, String value)
static ExpectedCondition<Boolean> attributeContains(org.openqa.selenium.WebElement element, String attribute, String value)
static ExpectedCondition<Boolean> attributeToBe(org.openqa.selenium.By locator, String attribute, String value)
static ExpectedCondition<Boolean> attributeToBe(org.openqa.selenium.WebElement element, String attribute, String value)
static ExpectedCondition<Boolean> attributeToBeNotEmpty(org.openqa.selenium.WebElement element, String attribute)
static ExpectedCondition<Boolean> elementSelectionStateToBe(org.openqa.selenium.By locator, boolean selected)
static ExpectedCondition<Boolean> elementSelectionStateToBe(org.openqa.selenium.WebElement element, boolean selected)
static ExpectedCondition<org.openqa.selenium.WebElement> elementToBeClickable(org.openqa.selenium.By locator)
static ExpectedCondition<org.openqa.selenium.WebElement> elementToBeClickable(org.openqa.selenium.WebElement element)
static ExpectedCondition<Boolean> elementToBeSelected(org.openqa.selenium.By locator)
static ExpectedCondition<Boolean> elementToBeSelected(org.openqa.selenium.WebElement element)
static ExpectedCondition<org.openqa.selenium.WebDriver> frameToBeAvailableAndSwitchToIt(org.openqa.selenium.By locator)
static ExpectedCondition<org.openqa.selenium.WebDriver> frameToBeAvailableAndSwitchToIt(int frameLocator)
static ExpectedCondition<org.openqa.selenium.WebDriver> frameToBeAvailableAndSwitchToIt(String frameLocator)
static ExpectedCondition<org.openqa.selenium.WebDriver> frameToBeAvailableAndSwitchToIt(org.openqa.selenium.WebElement frameLocator)
static ExpectedCondition<Boolean> invisibilityOfAllElements(List<org.openqa.selenium.WebElement> elements)
static ExpectedCondition<Boolean> invisibilityOfElementLocated(org.openqa.selenium.By locator)
static ExpectedCondition<Boolean> invisibilityOfElementWithText(org.openqa.selenium.By locator, String text)
static ExpectedCondition<Boolean> javaScriptThrowsNoExceptions(String javaScript)
static ExpectedCondition<Object> jsReturnsValue(String javaScript)
static ExpectedCondition<Boolean> not(ExpectedCondition<?> condition)
static ExpectedCondition<List<org.openqa.selenium.WebElement>> numberOfElementsToBe(org.openqa.selenium.By locator, Integer number)
static ExpectedCondition<List<org.openqa.selenium.WebElement>> numberOfElementsToBeLessThan(org.openqa.selenium.By locator, Integer number)
static ExpectedCondition<List<org.openqa.selenium.WebElement>> numberOfElementsToBeMoreThan(org.openqa.selenium.By locator, Integer number)
static ExpectedCondition<Boolean> numberOfwindowsToBe(int expectedNumberOfWindows)
static ExpectedCondition<Boolean> numberOfWindowsToBe(int expectedNumberOfWindows)
static ExpectedCondition<Boolean> or(ExpectedCondition<?>... conditions)
static ExpectedCondition<List<org.openqa.selenium.WebElement>> presenceOfAllElementsLocatedBy(org.openqa.selenium.By locator)
static ExpectedCondition<org.openqa.selenium.WebElement> presenceOfElementLocated(org.openqa.selenium.By locator)
static ExpectedCondition<org.openqa.selenium.WebElement> presenceOfNestedElementLocatedBy(org.openqa.selenium.By locator, org.openqa.selenium.By sub_locator)
static ExpectedCondition<org.openqa.selenium.WebElement> presenceOfNestedElementLocatedBy(org.openqa.selenium.WebElement element, org.openqa.selenium.By sub_locator)
static ExpectedCondition<List<org.openqa.selenium.WebElement>> presenceOfNestedElementsLocatedBy(org.openqa.selenium.By locator, org.openqa.selenium.By sub_locator)
static <T> ExpectedCondition<T> refreshed(ExpectedCondition<T> condition)
static ExpectedCondition<Boolean> stalenessOf(org.openqa.selenium.WebElement element)
static ExpectedCondition<Boolean> textMatches(org.openqa.selenium.By locator, Pattern pattern)
static ExpectedCondition<Boolean> textToBe(org.openqa.selenium.By locator, String value)
static ExpectedCondition<Boolean> textToBePresentInElement(org.openqa.selenium.By locator, String text)
static ExpectedCondition<Boolean> textToBePresentInElement(org.openqa.selenium.WebElement element, String text)
static ExpectedCondition<Boolean> textToBePresentInElementLocated(org.openqa.selenium.By locator, String text)
static ExpectedCondition<Boolean> textToBePresentInElementValue(org.openqa.selenium.By locator, String text)
static ExpectedCondition<Boolean> textToBePresentInElementValue(org.openqa.selenium.WebElement element, String text)
static ExpectedCondition<Boolean> titleContains(String title)
static ExpectedCondition<Boolean> titleIs(String title)
static ExpectedCondition<Boolean> urlContains(String fraction)
static ExpectedCondition<Boolean> urlMatches(String regex)
static ExpectedCondition<Boolean> urlToBe(String url)
static ExpectedCondition<org.openqa.selenium.WebElement> visibilityOf(org.openqa.selenium.WebElement element)
static ExpectedCondition<List<org.openqa.selenium.WebElement>> visibilityOfAllElements(List<org.openqa.selenium.WebElement> elements)
static ExpectedCondition<List<org.openqa.selenium.WebElement>> visibilityOfAllElementsLocatedBy(org.openqa.selenium.By locator)
static ExpectedCondition<org.openqa.selenium.WebElement> visibilityOfElementLocated(org.openqa.selenium.By locator)
static ExpectedCondition<List<org.openqa.selenium.WebElement>> visibilityOfNestedElementsLocatedBy(org.openqa.selenium.By locator, org.openqa.selenium.By sub_locator)
static ExpectedCondition<List<org.openqa.selenium.WebElement>> visibilityOfNestedElementsLocatedBy(org.openqa.selenium.WebElement element, org.openqa.selenium.By sub_locator)
спасибо
xotabu4
(Oleksandr Khotemskyi)
10.Апрель.2018 07:42:36
#8
Из-за этого я и считаю что официальные биндинги слишком низкоуровневые. Зацени насколько все проще с ленивыми элементами:
const pl_ctrl = $('div.player-controls')
const inf_curent_track = pl_ctrl.element(by.xpath(".//div[@class='player-controls__track-container']/div/div/div[1]"))
browser.wait(EC.visibilityOf(inf_curent_track), 10000, "Expected player controls to be visible in 10 seconds")