/ / selenium zapytanie xpath - xpath, selen

zapytanie selenowe xpath - xpath, selen

var value = selenium.GetXpathCount("//div[contains(@id,"spnPriceDetails")]");
int clickNo = 1;
for (var j = 1; j <= value; j++)
{
if (clickNo == j)
{

selenium.Click("//div[contains(@id,"spnPriceDetails")]");
}
clickNo = clickNo + 1;
}

Mam 25 takich samych linków na jednej stronie, którą zidentyfikowałemłączna liczba linków korzystających z liczby Xpath. Klikam na pierwszy link, ale gdy próbuję kliknąć na drugi i połączyć, kliknij pierwszy link za każdym razem zamiast drugiego

Odpowiedzi:

1 dla odpowiedzi № 1

Twój kod nie określa późniejszego linku, to jestrobienie tego samego wyszukiwania za każdym razem, pobieranie wszystkich 25 dopasowań "// div [zawiera (@id," spnPriceDetails ")]", a następnie kliknięcie pierwszego w wynikowym zestawie dopasowań. Musisz dodać zmienną iteratora do łańcucha wyszukiwania, tak jak poniżej:

for (var j = 1; j <= value; j++)
{
selenium.Click("(//div[contains(@id,"spnPriceDetails")])[" + j + "]");
}

W ten sposób kliknie każdą wartość na liście dopasowań.

Uwaga: Nie pamiętam, czy xpath zacznie się od indeksu 0 lub 1-indeksu. Ma on być 1, ale jeśli nie jest, może być konieczne uruchomienie pętli przy 0.


1 dla odpowiedzi nr 2

Spróbowałbym użyć pozycji w wyrażeniu xpath. Stworzyłem płynną bibliotekę Xpath, która może być pomocna:

Kod będzie coś takiego:

for (int i = 1; i <= value; i++)
{
selenium.Click(XPathFinder.Find.Tag("div").With.Attribute("id").
Containing("spnPriceDetails").And.Position(i).ToXPathExpression());
}

Więcej informacji na temat biblioteki XPath można znaleźć tutaj: http://www.unit-testing.net/CurrentArticle/How-To-Write-XPath-for-Selenium-Tests.html

Domyślam się, że zwykły ciąg znaków xpath byłby:

for (int i = 1; i <= value; i++)
{
selenium.Click(string.Format("//div[contains(@id,"spnPriceDetails") and position()={0}]",i));     }