Poniższy test nie powiedzie się, że wyrażenie xpath jest nieprawidłowe. Zrobiłem to zgodnie z samouczkami online.

// open browser
IWebDriver webDriver = new FirefoxDriver();
// navigate to site
webDriver.Navigate().GoToUrl("https://localhost:44311/");

// identify details button
IWebElement detailsLink = webDriver.FindElement(By.XPath("//*[contains(., 'Details')]"));

// operation
detailsLink.Click();

var detailsLabel = webDriver.FindElement(By.XPath("//div[text() = 'Change in $'"));

// assertion
Assert.That(detailsLabel.Displayed);

Chcę stworzyć prosty test selenu.

  • Naciskam konkretny przycisk, aby otworzyć nową stronę
  • Sprawdzanie, czy określony obiekt jest poprawnie załadowany na tej stronie

Przycisk jest <a></a> za pomocą Details wewnątrz. W rzeczywistości są duplikaty, jedyną wyjątkową rzeczą jest href. Może to być pierwszy problem, ale nie wiem, jak "złapać".
detailsLabel jest faktycznie <div>Change in $</div> za pomocą class, że myślę, że jest nieistotne dla testów.
Więc moje pytanie brzmi: jak poprawnie napisać ten test? Sam test powinien być mniej lub bardziej grzywny, ale detailsLink i detailsLabel ma pewne problemy.

Edytować

IWebElement detailsLink = webDriver.FindElement(By.CssSelector("[href*='Details?cryptocurrency=BTC']"));

//operation
detailsLink.Click();

var detailsLabel = webDriver.FindElement(By.XPath("//div[contains(text(),'Change in $')]"));

Wyjątek zwrotny Selenium.StaleElementReferenceException dla detailsLink

Edytować

IWebElement detailsLink = webDriver.FindElement(By.CssSelector("[href*='Details?cryptocurrency=BTC']"));

detailsLink.Click();

var detailsLabel = webDriver.FindElement(By.XPath("//*[text()='Change in $```
Test fails at `detailsLabel`, fails to find our target `div`.
0
user15515307 13 kwiecień 2021, 14:03

1 odpowiedź

Najlepsza odpowiedź

Aby sprawdzić, czy //*[contains(., 'Details')] xpath jest wyjątkowy, możesz zrobić coś takiego

List<WebElement>list = webDriver.FindElements(By.XPath("//*[contains(., 'Details')]"));

Teraz, jeśli list jest pusty - oznacza to, że Twój lokalizator jest nieprawidłowy, a jeśli zawiera więcej niż 1 element Lokalizator nie jest unikalny.
Ale lepszym sposobem jest poprawność tego ręcznie i bezpośrednio na stronie internetowej za pomocą narzędzia {x2}} Inspector na przeglądarce.
Aby zlokalizować element zawierający niektóre href bez specyficznego zastosowania HREF Tekst użycia //href w przypadku href jest znacznikiem elementu. W przeciwnym razie użyj //*[@href] Jeśli href jest atrybutem.
Dla detailsLabel spróbuj użyć //div[contains(text(),'Change in')] {{x10}}
Użyłem składni Java, ale jest wystarczająco podobny do {{x12}}

1
Eliyahu 13 kwiecień 2021, 11:30