Селен: Как использовать сохраненное значение в сравнении JavaScript - PullRequest
4 голосов
/ 21 января 2010

Я искал ответ на этот вопрос и нашел много более сложные вопросы, но ни один не дал мне достаточно понимания, чтобы понять это.
Что я делаю:
1- открыть страницу с номером, который, вероятно, будет большим
2 - получить путь X к этому номеру и сохранить его в переменной
3 - сделать JavaScript, чтобы сравнить вышеупомянутую сохраненную переменную, чтобы увидеть, если она больше 10, если так, установите новую переменную в true; иначе ложь (потому что это значение по умолчанию)
4- убедитесь, что переменная в # 3 истинна

Звучит достаточно просто, нет?

Где это идет не так:
На шаге 3 сравнение переменной с шага № 2 до 10 недопустимо, по крайней мере не так, как я пишу.

Почему?

подробности:

<tr>
   <td>open</td>
   <td>http://www.google.com/search?hl=en&q=selenium+verifyEval</td>
   <td></td>
</tr>
<tr>
   <td>store</td>
   <td>/html/body/div[5]/div/p/b[3]</td>
   <td>resultCount</td>
</tr>
<tr>
   <td>storeEval</td>
   <td>var isMoreThan10 = new Boolean(); isMoreThan10 = (resultCount &gt; 10);</td>
   <td>isMoreThan10</td>
</tr>
<tr>
   <td>verifyExpression</td>
   <td>${isMoreThan10}</td>
   <td>true</td>
</tr>

Я только что подумал об одном возможном обходном пути: разверните код javascript, чтобы получить там значение, и назначьте его переменной там, так что я с большей вероятностью смогу использовать эту переменную в javascript. Не уверен, как именно это будет сделано - кто-нибудь хочет помочь с этим?

Но, конечно, есть лучший путь, не так ли? Я должен иметь возможность присвоить значение переменной в Selenium, а затем в следующей строке использовать эту переменную в JavaScript, верно?

Ответы [ 3 ]

6 голосов
/ 21 января 2010

Нашел решение. Мало того, что я неправильно делал storeEval с тем, как я настраивал isMoreThan10; Я неправильно установил resultCount с неправильным вызовом магазина (вместо storeText) и неправильно вызвал resultCount в storeEval.

Вот правильный способ сделать это:

<tr>
<td>open</td>
<td>http://www.google.com/search?hl=en&amp;q=selenium+verifyEval</td>
<td></td>
</tr>
<tr>
<td>storeText</td>
<td>//p[@id='resultStats']/b[3]</td>
<td>resultCount</td>
</tr>
<tr>
<td>storeEval</td>
<td>(storedVars['resultCount'] &gt; 10) ? true : false</td>
<td>isMoreThan10</td>
</tr>
<tr>
<td>verifyExpression</td>
<td>${isMoreThan10}</td>
<td>true</td>
</tr>

Спасибо AutomatedTester за предложение троичного назначения в storeEval

1 голос
/ 21 января 2010

Это простая вещь, чтобы решить

<tr>
   <td>storeEval</td>
   <td>var isMoreThan10 = new Boolean(); isMoreThan10 = (resultCount &gt; 10);isMoreThan10 ;</td>
   <td>isMoreThan10</td>
</tr>

Это требует, чтобы у вас был результат, который вы хотите в конце. Если бы вы использовали троичный, было бы лучше, поскольку результат не хранится в переменной в javascript, через который вы проходите.

, например

  <tr>
       <td>storeEval</td>
       <td>(resultCount > 10) ? true : false</td>
       <td>isMoreThan10</td>
    </tr>
0 голосов
/ 09 февраля 2010

Этот тип вещей действительно использует TestPlan (который может работать как с Selenium, так и с HTMLUnit в качестве бэкэнда)

GotoURL http://www.google.com/search?hl=en&q=selenium+verifyEval
set %Count% (response //html/body/div[5]/div/p/b[3])
Notice Got Value %Count%
Checkpoint numComp %Count% > 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...