Как работать с еще двумя выпадающими Dynamic в VBA и webelement или selectelement? - PullRequest
0 голосов
/ 11 апреля 2019

Я работаю с селеном и VBA в эти дни, и у меня есть сомнения; когда я пытаюсь работать с раскрывающейся «динамикой», я не могу понять, почему мой webelement или selecelement не обновляются и не получают ошибку при обновлении раскрывающегося списка.

Например, мне нужно работать с веб-страницей, в которой есть таблица и два выбора, а также ввод, подобный кнопке, таблица изменяется только тогда, когда я выбрал опцию в обоих вариантах выбора.

для этого примера мы скажем:

Первый выбор имеет идентификатор Select1. второй выбор есть идентификатор Select2. Таблица table имеет идентификатор Table_1. кнопка ввода имеет идентификатор button1.

Таблица 1 изменяется или обновляется только в том случае, если в параметре Select1 И Select2 выбран параметр (если выбран только один параметр, таблица не изменяется или не обновляется)

В начале, когда открыта веб-страница (webdriver), выберите 1 и выберите 2, у которых нет опции выбора (вы знаете ... «Выбрать опцию»), конечно, в таблице_1 есть что-нибудь

для этого я использую:

Sub example()

'*// here a put code to initialize web driver and named WEB3

'*// in this part i have webpage opnened so...


'*//here i get my variables

Set GGT = WEB3.FindElementById("Select1").AsSelect
Set CBT = WEB3.FindElementById("Select2").AsSelect
Set SubElement = WEB3.FindElementByClass("button1")

'*//use this for to "play" with webpage

For Each i In GGT.Options
   for each j in CBT.Options
    GGT.SelectByIndex (i.Attribute("index"))
    CBT.SelectByIndex (j.Attribute("index"))
    subelment.click
Next
Next

end sub

ну, в этой таблице точек есть два выбора;

Select1 и Select2 независимы и оба являются статическими, то есть опции всегда одинаковы

Subelment (кнопка) обновляет таблицу и выбирает начало (не обновлять веб-страницу).

если я запускаю код, у меня нет проблем. Выберите вариант выбора 1 (1), затем выберите вариант 2 (1), (2) и т. Д .; Вы знаете все комбинации и таблицы генерируют все таблицы. но если преобразование Select2 и теперь select2 зависит от Select1, у меня есть следующее условие:

Select1 является статическим, Select2 является динамическим и зависит от select1, то есть предположим, что у Select1 есть 3 варианта фруктов, форм и цветов. но Select2 изменяется для каждого параметра в Select2 для этого примера если Select1 - фрукты, у select2 есть варианты яблок и груш; если Select1 - фигуры, у select2 есть опции квадрат и круг, а если select1 - цвет, то select2 показывают красный и синий.

вот где у меня проблема, я не понимаю, что происходит, что приводит к ошибке

For Each i In GGT.Options
For Each j In CBT.Options
    GGT.SelectByIndex (i.Attribute("index"))
    CBT.SelectByIndex (j.Attribute("index")) '*//here show error 10 in 
                                                 second iteration
    subelement.click
Next
Next

Во-первых, я подумал, что из-за изменения Select2 мне нужно обновить переменную CBT, поэтому добавил: Установите CBT = WEB3.FindElementById ("Select2"). AsSelect между форсами так ...

For Each i In GGT.Options
Set CBT = WEB3.FindElementById("Select2").AsSelect
  For Each j In CBT.Options
    GGT.SelectByIndex (i.Attribute("index"))
    CBT.SelectByIndex (j.Attribute("index")) '*//here show error 10 in 
                                                 second iteration
    subelement.click
  Next
Next

но ошибка не работает, я не знаю, почему, если я обновляю CBT, не обновляю ее. Я имею в виду, как в Excel, когда в ячейках (1,1) ставить = C2 + F3, если я перемещаю ячейки F3 в r2, автоматически актуализировать функцию, поэтому "= C2 + r2", но если я использую ключ supr или delet, изменяйте только значение, получающее функцию (0), НО, если я щелкну правой кнопкой мыши на F3 и выберу исключить ячейку, создадим ошибку REF, потому что ячейки F3 были устранены и поставлен новый F3. Я думаю, что это произошло по той причине, по которой я добавил Установите CBT = WEB3.FindElementById ("Select2"). AsSelect получить новый Select2, но не работает. CBT sitll получает старый select2 и не получает новый select2

после того, как я попытался использовать явный код, то есть не использовать переменные CBT, GGT и ставить все предложения, но все равно.

ТАК это мой вопрос; как использовать SET или обновить Webelement o Selectelement insdie FOR-FOR с раскрывающимся списком.

или объяснение, почему не обновлять переменную, как другие переменные, я имею в виду эта работа

Dim L as integer
L=4
L=5
L=L+5

эта работа

SET H=Webdriver.findelementbyid("kgkj")
SET H=Webdriver.findelementbyid("utut")
SET H=H.asselect

Но если я положу его в FOR-FOR (извините, привычка FOR-FOR - это два вложенных в FOR или FOR внутри XD), он не будет работать

Кто-то, кто может объяснить, почему или как выполнить этот маленький пример с FOR-FOR и динамикой выпадающего списка.

Первое, спасибо

NT: я использую .asselect и findelmentbyid (), потому что время назад использовался для использования getelment и Select, но сейчас я не знаю, почему этот синтаксис все еще не работает (я думаю, это потому, что используют VBA)

1 Ответ

0 голосов
/ 11 апреля 2019

Должен ли ваш заказ быть другим?Если 2 изменения зависят от 1, то выбор 1 должен происходить до установки 2 и зацикливания на 2.

For Each i In GGT.Options
    GGT.SelectByIndex i.Attribute("index") 
    'possible wait condition here
    Set CBT = WEB3.FindElementById("Select2").AsSelect
    For Each j In CBT.Options       
       CBT.SelectByIndex j.Attribute("index") 
       subelement.click
    Next
Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...