t.me/atinfo_chat Telegram группа по автоматизации тестирования

Беда с фреймами (C#, все последние вэб-дрова)


(apetrovskiy) #1

Решил разобраться с фреймами и начал с простого - три файла, один повторяется, четыре фрейма:

 

<!DOCTYPE html>
<html>
<title>
Containers
</title>
<frameset cols="25,25,25,25">
<frame id="frame1" src="./containers.htm" name="containersframe">
<div id="div11">
div11
<div id="div12">
div12
<div id="div13">
div13
<p>My first paragraph 1.</p>
<p>My second paragraph 1.</p>
</div>
</div>
</div>
</frame>
 
<frame id="frame2" src="./result1.htm" name="resultframe">
<div id="div21">
div21
<div id="div22">
div22
<div id="div23">
div23
<p>My first paragraph 2.</p>
<p>My second paragraph 2.</p>
</div>
</div>
</div>
</frame>
 
<frame id="frame3" src="./containers.htm" name="containers2frame">
<div id="div31">
div31
<div id="div32">
div32
<div id="div33">
div33
<p>My first paragraph 3.</p>
<p>My second paragraph 3.</p>
</div>
</div>
</div>
</frame>
 
<frame id="frame4" src="./controls.htm" name="controlsframe">
<div id="div41">
div41
<div id="div42">
div42
<div id="div43">
div43
<p>My first paragraph 4.</p>
<p>My second paragraph 4.</p>
</div>
</div>
</div>
</frame>
 
</frameset>
</html>
 
Результаты:
Chrome: работает по индексу, не работает по имени
FF: не работает по индексу, не работает по имени
Ещё заметил, что достаточно на несколько минут его (фф) оставить не трогая, вообще перестаёт фреймы находить. (Но, возможно, это он автоконфигурируется на прокси и без этого уже ничего не хочет делать.)
 
Вопросы:
1) что идёт за имя?  id? name? подобрать не удалось
2) селениум в принципе не выдаёт эксепшн, если фрейма не нашёл? т.е., генерить ошибку только руками?

 


(Mykhailo Poliarush) #2

ну если вы уже делаете эксперементы, то выкладывайте код, который вы делаете :)

1. насколько я помню значение береться из id

2. выдает только эксепшин, когда вы сделали неправельный вызов. Но вы можете проверить наличие frame через findElement, который генерирует ошибку, если элемент не найден

 

  public ResultType call() throws Exception {
    if (id == null) {
      getDriver().switchTo().defaultContent();
    } else if (id instanceof Number) {
      getDriver().switchTo().frame(((Number) id).intValue());
    } else if (id instanceof WebElement) {
      getDriver().switchTo().frame((WebElement) id);
    } else if (id instanceof String) {
      getDriver().switchTo().frame((String) id);
    } else {
      throw new IllegalArgumentException("Unsupported frame locator: " + id.getClass().getName());
    }

    return ResultType.SUCCESS;
  }