Ожидание подэлемента элемента в C # Selenium - PullRequest
0 голосов
/ 10 ноября 2018

Можно ли найти элемент, а затем ждать дочернего элемента этого элемента? Я не знаю полный xpath, потому что я перебираю коллекцию элементов.

Допустим, я нашел элемент:

IWebDriver driver = new ChromeDriver(chromeDriverPath);
IWebElement firstElement = driver.FindElement(By.XPath("//table/tr[1]"));

Теперь есть подэлемент, который я хочу найти, но сделаю вид, что не могу знать полный xpath, потому что я перебираю элементы:

IWebElement secondElement = firstElement.FindElement(By.XPath("./td[5]"));

Как я могу дождаться существования второго элемента вместо использования FindElement. Обычно я ожидал бы элемент со следующим кодом, но в этом случае я знаю только xpath относительно xpath родительского элемента.

var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
var waitedForElement = wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementExists(By.XPath("./td[5]")));

1 Ответ

0 голосов
/ 03 июля 2019

Обновление :

Ответ выложен здесь должен работать на вышеуказанный вопрос


Оригинал

Я искал тот же ответ. Пока я не думаю, что есть выход. Я долго искал ответ на этот вопрос.

Полагаю, вам придется выяснить XPath элемента, в котором вы хотите найти подэлемент. Как только вы это сделаете, вы добавите это к шрифту XPath, который вы собираетесь использовать, чтобы найти подэлемент. Не звучит элегантно. Завтра попробую и посмотрю, как получится.

Здесь в github обсуждается, как откатить XPath от существующего элемента. https://groups.google.com/forum/#!topic/selenium-users/kvGLSzl_GQE

    protected String getXPath() { 
    String jscript = "function getPathTo(node) {" + 
        "  var stack = [];" + 
        "  while(node.parentNode !== null) {" + 
        "    stack.unshift(node.tagName);" + 
        "    node = node.parentNode;" + 
        "  }" + 
        "  return stack.join('/');" + 
        "}" + 
        "return getPathTo(arguments[0]);"; 
    return (String) driver.executeScript(jscript, webElement); 
} 

Внимание! :

из того, что я понимаю, вы не должны помещать element.FindElemen () в wait.Until (). Сначала выполняется внутренний код (FindElement), что не соответствует цели wait.Until () ... поэтому код, структурированный так, как описано в этом предупреждении, не будет ждать.

PS: найденное мной решение не сработало. Это дало мне XPath, но XPath не для элемента, с которого я получил Xpath.

...