Как найти HTML-тег с помощью Selenium

#css #selenium #xpath #automation #robotframework

Вопрос:

Я пытаюсь получить значение, определенное в <style> теге в HTML, но продолжаю получать сообщение об ошибке, что элемент не может быть найден

 //div[contains(@class,'StageModuleText')]//style
 

Получение этой ошибки от RobotFramework

 Element '//div[contains(@class,'StageModuleText')]//style' not visible after 30 seconds
 

Это HTML

 <style>
.item_5b8bfb83-375e-4605-8388-01340ea4bc61_7642733d-4309-4e81-8f64-5a6a55f4994a_d21bf969-efd0-46eb-9545-4cbbd550139e a {
                  color: #bc206e
                } 
</style>
 

Я пытаюсь определить значение цвета, но я даже не могу найти элемент. Но когда консоль открыта, я могу легко найти ее на вкладке элементы, используя xpath

ИЗМЕНИТЬ: Вот более широкий пример кода:

 <div class="editor-outer    StageModuleText_wrapper__3kHNI item_60036ccd-a7a8-41f3-b858-d0db08f31cfa_06fab0b6-0ab8-4000-a162-7d1dc8bf97c2_b5ce6362-949f-4b81-bf9c-9a0ebc46bc63">
    <style>
        .item_60036ccd-a7a8-41f3-b858-d0db08f31cfa_06fab0b6-0ab8-4000-a162-7d1dc8bf97c2_b5ce6362-949f-4b81-bf9c-9a0ebc46bc63 a { 
            color: #44a1a9 
        }
        .editor_item_60036ccd-a7a8-41f3-b858-d0db08f31cfa_06fab0b6-0ab8-4000-a162-7d1dc8bf97c2_b5ce6362-949f-4b81-bf9c-9a0ebc46bc63 * { 
                  line-height: 1.2 !important;
            }
    </style>
    <div class="editor-wrapper editorwrapper_text editor_item_60036ccd-a7a8-41f3-b858-d0db08f31cfa_06fab0b6-0ab8-4000-a162-7d1dc8bf97c2_b5ce6362-949f-4b81-bf9c-9a0ebc46bc63 StageModuleText_editorWrapper__19Z6l">
        <div id="mce_66c9e9a4_8d68-41e5-b662-d7be6a68391c" tabindex="-1" class="mce-content-body" contenteditable="true" style="position: relative;">
            <div class="txtTinyMce-wrapper" style="font-size: 14px; line-height: 28px;" data-mce-style="font-size: 14px; line-height: 28px;">
                <p style="font-size: 14px;" data-mce-style="font-size: 14px;">I'm a new Text block ready for your content.</p>
            </div>
        </div>
    </div>
</div>
 

Комментарии:

1. not visible after 30 seconds это не значит, что » элемент не может быть найден «, это означает, что он невидим . Обратите внимание, что style узел в любом случае не будет виден

2. Можете ли вы поделиться соответствующим HTML-кодом или URL-адресом страницы, если это возможно ?

3. Почему бы просто не использовать.tagName(«стиль»)

4. @Kundan : потому что в HTML может быть несколько тегов стилей, и OP, конечно, не хочет первый тег стиля.

5. @cruisepandey Я имел в виду сохранить элемент div в переменной, а затем использовать findElement(По.tagName()) для этой переменной. Извините, что я не был ясен в своем первом комментарии. С другой стороны, разве вы не можете просто получить текст тега div и извлечь из него значение цвета?

Ответ №1:

С помощью приведенного ниже кода я смог извлечь значение цвета

     WebElement ele = driver.findElement(By.cssSelector("div[class*=editor-outer]"));
    
    String html = ele.getAttribute("innerHTML");
    String[] arr = html.split("n");

    for(int i=0; i< arr.length; i  )
    {
        if(arr[i].contains("color"))
        {
            String color = arr[i].split(":")[1].trim();
            System.out.println(color);
            
        }
    }
 

Комментарии:

1. Спасибо! Реализовано нечто подобное в python/RobotFramework. Вот код для тех, кто ищет font_color = «css:div[класс*=внешний редактор]» element_style = self.selib.get_element_attribute(цвет шрифта, «Внутренний текст») шестнадцатеричное значение = повторный поиск(«цвет: (#.{6})», element_style).группа(1).разделение(‘,’)[0]