Browse Source

fix: element not found when verify element

Ahmad Kholid 2 years ago
parent
commit
d2aaba4b5a

+ 7 - 8
src/content/blocksHandler/handlerVerifySelector.js

@@ -10,14 +10,13 @@ async function verifySelector(block) {
     return { notFound: true };
     return { notFound: true };
   }
   }
 
 
-  if (!block.data.multiple) {
-    elements.scrollIntoView({
-      block: 'center',
-      inline: 'center',
-      behavior: 'smooth',
-    });
-    elements = [elements];
-  }
+  if (!block.data.multiple) elements = [elements];
+
+  elements[0].scrollIntoView({
+    block: 'center',
+    inline: 'center',
+    behavior: 'smooth',
+  });
 
 
   const divEl = document.createElement('div');
   const divEl = document.createElement('div');
   divEl.style =
   divEl.style =

+ 1 - 0
src/content/handleSelector.js

@@ -105,5 +105,6 @@ export default async function (
     return elements;
     return elements;
   } catch (error) {
   } catch (error) {
     console.error(error);
     console.error(error);
+    throw error;
   }
   }
 }
 }

+ 1 - 2
src/content/index.js

@@ -42,8 +42,7 @@ function messageToFrame(frameElement, blockData) {
 }
 }
 async function executeBlock(data) {
 async function executeBlock(data) {
   const removeExecutedBlock = showExecutedBlock(data, data.executedBlockOnWeb);
   const removeExecutedBlock = showExecutedBlock(data, data.executedBlockOnWeb);
-
-  if (data.data?.selector?.includes('|>') && isMainFrame) {
+  if (data.data?.selector?.includes('|>')) {
     const [frameSelector, selector] = data.data.selector.split(/\|>(.+)/);
     const [frameSelector, selector] = data.data.selector.split(/\|>(.+)/);
     const frameElement = document.querySelector(frameSelector);
     const frameElement = document.querySelector(frameSelector);
     const frameError = (message) => {
     const frameError = (message) => {

+ 26 - 17
src/newtab/utils/elementSelector.js

@@ -50,24 +50,33 @@ async function initElementSelector(tab = null) {
 }
 }
 
 
 async function verifySelector(data) {
 async function verifySelector(data) {
-  const activeTab = await getActiveTab();
-
-  if (!data.findBy) {
-    data.findBy = isXPath(data.selector) ? 'xpath' : 'cssSelector';
+  try {
+    const activeTab = await getActiveTab();
+
+    if (!data.findBy) {
+      data.findBy = isXPath(data.selector) ? 'xpath' : 'cssSelector';
+    }
+
+    await browser.tabs.update(activeTab.id, { active: true });
+    await browser.windows.update(activeTab.windowId, { focused: true });
+
+    const result = await browser.tabs.sendMessage(
+      activeTab.id,
+      {
+        data,
+        isBlock: true,
+        label: 'verify-selector',
+      },
+      { frameId: 0 }
+    );
+
+    return result;
+  } catch (error) {
+    console.error(error);
+    return { notFound: true };
+  } finally {
+    await makeDashboardFocus();
   }
   }
-
-  await browser.tabs.update(activeTab.id, { active: true });
-  await browser.windows.update(activeTab.windowId, { focused: true });
-
-  const result = await browser.tabs.sendMessage(activeTab.id, {
-    data,
-    isBlock: true,
-    label: 'verify-selector',
-  });
-
-  await makeDashboardFocus();
-
-  return result;
 }
 }
 
 
 async function selectElement(name) {
 async function selectElement(name) {